package cn.com.blueInfo.bpm.person.request;

import cn.com.blueInfo.bpm.common.request.BaseDTO;
import cn.com.blueInfo.bpm.common.request.BaseQueryDTO;
import cn.com.blueInfo.bpm.person.enums.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDate;

/**
 * 员工基本信息表 接收参数机校验
 * @author suxch
 * @since 2025-08-21 05:08:55
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "员工基本信息 接收参数机校验")
public class UserBaseDTO extends BaseDTO {

    /** 用户编号 */
    @NotNull(message = "用户编号不能为空")
    @Schema(description = "用户编号")
    private Integer userNum;
    /** 用户编码 */
    @NotBlank(message = "用户编码不能为空")
    @Schema(description = "用户编码")
    private String userCode;
    /** 用户姓名 */
    @NotBlank(message = "用户姓名不能为空")
    @Size(min = 2, max = 16, message = "用户姓名不能少于两个字")
    @Schema(description = "用户姓名")
    private String userName;
    /** 性别：1-男，2-女 */
    @NotNull(message = "性别不能为空")
    @Schema(description = "性别：1-男，2-女")
    private UserBaseSex sex;
    /** 邮箱 */
    @Email(message = "邮箱格式不正确")
    @Schema(description = "邮箱")
    private String email;
    /** 入职日期 */
    @NotNull(message = "入职日期不能为空")
    @Schema(description = "入职日期")
    private LocalDate entryDate;
    /** 工作电话 */
    @Size(min = 7, message = "工作电话不能少于7位")
    @Schema(description = "工作电话")
    private String workPhone;
    /** 手机号 */
    @NotBlank(message = "手机号不能为空")
    @Size(min = 11, message = "手机号不能少于11位")
    @Schema(description = "手机号")
    private String mobile;
    /** 证件类型：1-身份证，2-护照 */
    @NotNull(message = "证件类型不能为空")
    @Schema(description = "证件类型：1-身份证，2-护照")
    private UserBaseIdentityType identityType;
    /** 证件编号 */
    @NotBlank(message = "证件编号不能为空")
    @Size(min = 18, message = "证件编号不能少于18位")
    @Schema(description = "证件编号")
    private String identityNo;
    /** 生日 */
    @Schema(description = "生日")
    private LocalDate birthday;
    /** QQ号 */
    @Schema(description = "QQ号")
    private String qq;
    /** 微信号 */
    @Schema(description = "微信号")
    private String weChat;
    /** 微信唯一编码（扫码登录用） */
    @Schema(description = "微信唯一编码（扫码登录用）")
    private String weChatId;
    /** 人员状态：1-在职，2-离职，3-待入职，4-休假 */
    @NotNull(message = "人员状态不能为空")
    @Schema(description = "人员状态：1-在职，2-离职，3-待入职，4-休假")
    private UserBaseUserStatus userStatus;
    /** 用工类型：1-正式员工，2-实习生，3-退休返聘 */
    @NotNull(message = "用工类型不能为空")
    @Schema(description = "用工类型：1-正式员工，2-实习生，3-退休返聘")
    private UserBaseEmploymentType employmentType;
    /** 紧急联系人姓名 */
    @Schema(description = "紧急联系人姓名")
    private String emergencyName;
    /** 紧急联系人电话 */
    @Schema(description = "紧急联系人电话")
    private String emergencyMobile;
    /** 学历：0-小学，1-初中，2-高中，3-中专，4-大专，5-本科，6-硕士，7-博士 */
    @Schema(description = "学历：0-小学，1-初中，2-高中，3-中专，4-大专，5-本科，6-硕士，7-博士")
    private UserBaseEducation education;
    /** 合同开始日期 */
    @NotNull(message = "合同开始日期不能为空")
    @Schema(description = "合同开始日期")
    private LocalDate contractStartDate;
    /** 合同结束日期 */
    @NotNull(message = "合同结束日期不能为空")
    @Schema(description = "合同结束日期")
    private LocalDate contractEndDate;
    /** 租户ID，仅平台超管可操作 */
    @Schema(description = "租户ID，仅平台超管可操作")
    private Long tenantId;
    /** 租户系统ID，仅平台超管可操作 */
    @Schema(description = "租户系统ID，仅平台超管可操作")
    private Long applicationId;
    /** 创建人ID，仅平台超管可操作 */
    @Schema(description = "创建人ID，仅平台超管可操作")
    private Long createUserId;

    /**
     * 员工基本信息 接收分页查询参数
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "员工基本信息 接收分页查询参数")
    public static class QueryDTO extends BaseQueryDTO {

        /** 用户编号 */
        @Schema(description = "用户编号")
        private Integer userNum;
        /** 用户编码 */
        @Schema(description = "用户编码")
        private String userCode;
        /** 用户姓名 */
        @Schema(description = "用户姓名")
        private String userName;
        /** 性别：1-男，2-女 */
        @Schema(description = "性别：1-男，2-女")
        private UserBaseSex sex;
        /** 邮箱 */
        @Schema(description = "邮箱")
        private String email;
        /** 入职日期 */
        @Schema(description = "入职日期")
        private LocalDate entryDate;
        /** 工作电话 */
        @Schema(description = "工作电话")
        private String workPhone;
        /** 手机号 */
        @Schema(description = "手机号")
        private String mobile;
        /** 证件类型：1-身份证，2-护照 */
        @Schema(description = "证件类型：1-身份证，2-护照")
        private UserBaseIdentityType identityType;
        /** 证件编号 */
        @Schema(description = "证件编号")
        private String identityNo;
        /** 生日 */
        @Schema(description = "生日")
        private LocalDate birthday;
        /** QQ号 */
        @Schema(description = "QQ号")
        private String qq;
        /** 微信号 */
        @Schema(description = "微信号")
        private String weChat;
        /** 微信唯一编码（扫码登录用） */
        @Schema(description = "微信唯一编码（扫码登录用）")
        private String weChatId;
        /** 人员状态：1-在职，2-离职，3-待入职，4-休假 */
        @Schema(description = "人员状态：1-在职，2-离职，3-待入职，4-休假")
        private UserBaseUserStatus userStatus;
        /** 用工类型：1-正式员工，2-实习生，3-退休返聘 */
        @Schema(description = "用工类型：1-正式员工，2-实习生，3-退休返聘")
        private UserBaseEmploymentType employmentType;
        /** 紧急联系人姓名 */
        @Schema(description = "紧急联系人姓名")
        private String emergencyName;
        /** 紧急联系人电话 */
        @Schema(description = "紧急联系人电话")
        private String emergencyMobile;
        /** 学历：0-小学，1-初中，2-高中，3-中专，4-大专，5-本科，6-硕士，7-博士 */
        @Schema(description = "学历：0-小学，1-初中，2-高中，3-中专，4-大专，5-本科，6-硕士，7-博士")
        private UserBaseEducation education;
        /** 合同开始日期 */
        @Schema(description = "合同开始日期")
        private LocalDate contractStartDate;
        /** 合同结束日期 */
        @Schema(description = "合同结束日期")
        private LocalDate contractEndDate;

    }

    /**
     * 员工基本信息表 接收部分更新参数及校验
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "员工基本信息 接收部分更新参数及校验")
    public static class UpdatePartialDTO extends BaseDTO {
        /** 邮箱 */
        @Email(message = "邮箱格式不正确")
        @Schema(description = "邮箱")
        private String email;
        /** 工作电话 */
        @Size(min = 7, message = "工作电话不能少于7位")
        @Schema(description = "工作电话")
        private String workPhone;
        /** 手机号 */
        @Size(min = 11, message = "手机号不能少于11位")
        @Schema(description = "手机号")
        private String mobile;
        /** 生日 */
        @Schema(description = "生日")
        private LocalDate birthday;
        /** QQ号 */
        @Schema(description = "QQ号")
        private String qq;
        /** 微信号 */
        @Schema(description = "微信号")
        private String weChat;
        /** 微信唯一编码（扫码登录用） */
        @Schema(description = "微信唯一编码（扫码登录用）")
        private String weChatId;
        /** 紧急联系人姓名 */
        @Schema(description = "紧急联系人姓名")
        private String emergencyName;
        /** 紧急联系人电话 */
        @Schema(description = "紧急联系人电话")
        private String emergencyMobile;
        /** 学历：0-小学，1-初中，2-高中，3-中专，4-大专，5-本科，6-硕士，7-博士 */
        @Schema(description = "学历：0-小学，1-初中，2-高中，3-中专，4-大专，5-本科，6-硕士，7-博士")
        private UserBaseEducation education;
        /** 创建人ID，仅平台超管可操作 */
        @Schema(description = "创建人ID，仅平台超管可操作")
        private Long createUserId;

    }

}